extends Card

# 涅槃点火卡牌
# 功能：消耗回合内所有能量，角色永久获得消耗数*X的力量
# 力量增益将持续到战斗结束，是玩家的永久属性

@export var power_multiplier: float = 2.0  # 力量倍数，可在编辑器中调整

func get_default_tooltip() -> String:
	#默认情况下使用一个合理的默认值，实际值在get_updated_tooltip中动态获取
	var example_mana = 5  # 示例能量值
	var example_power = int(example_mana * power_multiplier)
	return tooltip_text % example_power

func get_updated_tooltip(player_modifiers: ModifierHandler, _enemy_modifiers: ModifierHandler) -> String:
	# 动态获取当前能量值，计算实际可获得的力量
	var current_mana = 5  # 默认值
	
	# 通过player_modifiers获取玩家信息
	if player_modifiers and player_modifiers.get_parent():
		var player = player_modifiers.get_parent()
		if player and player.stats:
			current_mana = player.stats.mana
			print("🔥 涅槃点火动态tooltip获取当前能量: %d" % current_mana)
	
	# 如果无法通过player_modifiers获取，尝试使用Card基类的静态方法
	if current_mana == 5 and player_modifiers:
		var tree = player_modifiers.get_tree()
		if tree:
			var player = Card.find_player(tree)
			if player and player.stats:
				current_mana = player.stats.mana
				print("🔥 涅槃点火通过静态方法获取当前能量: %d" % current_mana)
	
	# 计算当前可获得的力量
	var current_power = int(current_mana * power_multiplier)
	
	# 使用%操作符替换占位符
	return tooltip_text % current_power

func apply_effects(targets: Array[Node], modifiers: ModifierHandler) -> void:
	print("🔥 涅槃点火卡牌被使用！")
	
	for target in targets:
		if target is Player:
			print("🔥 涅槃点火效果触发，目标: %s" % target.name)
			
			# 实现具体效果逻辑
			_apply_nirvana_ignition_effect(target)
			
			if sound:
				SFXPlayer.play(sound)
		else:
			print("❌ 目标不是Player类型: %s" % target.get_class())

# 应用涅槃点火效果
func _apply_nirvana_ignition_effect(player: Player) -> void:
	if not player.stats:
		print("❌ 玩家没有stats组件")
		return
	
	# 获取当前能量值
	var current_mana = player.stats.mana
	print("🔥 涅槃点火：当前能量 %d" % current_mana)
	
	if current_mana <= 0:
		print("⚠️ 涅槃点火：当前没有能量，无法触发效果")
		return
	
	# 消耗所有能量
	player.stats.spend_mana(current_mana, false)  # 不允许贷款
	print("💸 涅槃点火：消耗所有能量 %d" % current_mana)
	
	# 计算获得的力量值
	var power_gained = int(current_mana * power_multiplier)
	print("💪 涅槃点火：获得力量 %d (消耗能量 %d × 倍数 %.1f)" % [power_gained, current_mana, power_multiplier])
	
	# 应用力量增益到玩家
	_apply_power_buff(player, power_gained)
	
	# 显示效果提示
	_show_power_gain_effect(player, power_gained)
	
	# 验证力量增益是否正确应用
	_verify_power_buff_application(player)

# 验证力量增益应用
func _verify_power_buff_application(player: Player) -> void:
	if not player.get("modifier_handler"):
		print("❌ 无法验证力量增益：玩家没有modifier_handler")
		return
	
	var dmg_dealt_modifier: Modifier = player.modifier_handler.get_modifier(Modifier.Type.DMG_DEALT)
	if not dmg_dealt_modifier:
		print("❌ 无法验证力量增益：没有找到DMG_DEALT修改器")
		return
	
	# 获取修改后的伤害值（测试力量增益是否生效）
	var base_damage = 1  # 测试用的基础伤害
	var modified_damage = player.modifier_handler.get_modified_value(base_damage, Modifier.Type.DMG_DEALT)
	print("🔍 力量增益验证: 基础伤害 %d → 修改后伤害 %d" % [base_damage, modified_damage])
	
	if modified_damage > base_damage:
		print("✅ 力量增益验证成功！伤害加成: +%d" % (modified_damage - base_damage))
	else:
		print("⚠️ 力量增益验证失败！没有检测到伤害加成")

# 测试力量增益在伤害计算中的应用
func test_power_buff_damage_calculation(player: Player) -> void:
	print("🧪 开始测试力量增益在伤害计算中的应用...")
	
	if not player.get("modifier_handler"):
		print("❌ 测试失败：玩家没有modifier_handler")
		return
	
	# 测试不同基础伤害值
	var test_damages = [1, 5, 10]
	
	for base_damage in test_damages:
		var modified_damage = player.modifier_handler.get_modified_value(base_damage, Modifier.Type.DMG_DEALT)
		var damage_bonus = modified_damage - base_damage
		
		print("🧪 测试伤害 %d → %d (加成: +%d)" % [base_damage, modified_damage, damage_bonus])
		
		if damage_bonus > 0:
			print("✅ 力量增益生效！基础伤害 %d 获得 +%d 加成" % [base_damage, damage_bonus])
		else:
			print("⚠️ 力量增益未生效！基础伤害 %d 没有获得加成" % base_damage)
	
	print("🧪 力量增益测试完成")

# 应用力量增益
func _apply_power_buff(player: Player, power_amount: int) -> void:
	# 检查玩家是否有modifier_handler
	if not player.get("modifier_handler"):
		print("❌ 玩家没有modifier_handler，无法应用力量增益")
		return
	
	# 获取或创建DMG_DEALT修改器
	var dmg_dealt_modifier: Modifier = player.modifier_handler.get_modifier(Modifier.Type.DMG_DEALT)
	if not dmg_dealt_modifier:
		dmg_dealt_modifier = Modifier.new()
		dmg_dealt_modifier.type = Modifier.Type.DMG_DEALT
		player.modifier_handler.add_child(dmg_dealt_modifier)
		print("🔧 为玩家创建DMG_DEALT修改器")
	
	# 创建力量增益修改值
	var power_value := ModifierValue.create_new_modifier("nirvana_ignition_power", ModifierValue.Type.FLAT)
	power_value.flat_value = power_amount
	
	# 添加到修改器
	dmg_dealt_modifier.add_new_value(power_value)
	print("💪 已为 %s 添加永久力量增益修改器，增加: +%d" % [player.name, power_amount])
	
	# 力量增益是永久性的，不需要自动移除
	print("🔥 涅槃点火：力量增益已永久保存，将持续到战斗结束")
	
	# 测试力量增益是否正确应用
	test_power_buff_damage_calculation(player)

# 安排力量增益的自动移除（已移除 - 力量是永久属性）
func _schedule_power_removal(player: Player, modifier: Modifier) -> void:
	# 力量增益是永久性的，不需要自动移除
	print("🔥 涅槃点火：力量增益是永久属性，不会自动移除")

# 创建力量移除效果（已移除 - 力量是永久属性）
func _create_power_removal_effect(player: Player, modifier: Modifier) -> Effect:
	# 力量增益是永久性的，不需要移除效果
	print("🔥 涅槃点火：力量增益是永久属性，不需要移除效果")
	return null

# 显示力量获得效果
func _show_power_gain_effect(player: Player, power_amount: int) -> void:
	# 这里可以添加视觉效果，比如显示数字、播放动画等
	print("✨ %s 获得 %d 点力量！" % [player.name, power_amount])
	
	# 可以在这里触发UI更新事件
	if Events.has_signal("player_power_changed"):
		Events.player_power_changed.emit(player, power_amount)

# 从玩家获取battle引用
func _get_battle_from_player(player: Node) -> Node:
	# 使用Card基类中的静态方法
	var tree = player.get_tree()
	if tree:
		return Card.find_battle(tree)
	return null

# 获取玩家引用
func _get_player(targets: Array[Node]) -> Node:
	for target in targets:
		if target is Player:
			return target
		# 如果target不是Player，尝试通过场景树查找
		var tree = target.get_tree()
		if tree:
			var player = Card.find_player(tree)
			if player:
				return player
	return null 
